# -*- coding: utf-8 -*-
"""
作者: liuzaiqiang
邮箱: zaiqiangliu@163.com
地址: 新疆大学
创建时间: 2025/11/15 13:15
功能描述: 
"""

#题目背景：在处理实验数据或日志文件时，数据通常是按时间戳排序的。一个常见的需求是：快速找到某个特定时间点之后的第一条记录。例如，在一天的气温记录中，找到气温首次超过30度的那个时刻。如果数据量巨大，线性扫描会非常耗时，而二分查找则是一个高效得多的选择。
#题目描述：给定一个按时间戳升序排列的日志列表 logs ，每个日志是一个元组 (timestamp, event_data) 。 请编写一个函数 find_first_occurrence ，该函数接收 logs 列表和一个目标时间戳target_timestamp ，并返回列表中第一个时间戳大于或等于 target_timestamp 的日志。如果不存在这样的日志，则返回 None 。
#要求： 1. 必须使用二分查找算法来保证效率。2. 使用函数式编程，例如将数据提取和比较的逻辑用 lambda 函数来表达，使代码更具通用性。
def find_first_occurrence(logs, target_timestamp):
    # 使用二分查找算法来找到第一个时间戳大于或等于 target_timestamp 的日志
    # 提取时间戳
    timestamps = list(map(lambda log: log[0], logs))
    # 使用二分查找算法
    left, right = 0, len(timestamps) - 1
    while left <= right:
        mid = (left + right) // 2
        if timestamps[mid] < target_timestamp:
            left = mid + 1
        else:
            right = mid - 1
    # 如果找到了.则返回对应的日志，否则返回 None
    if left < len(timestamps) and timestamps[left] >= target_timestamp:
        return logs[left]
    else:
        return None

# 测试数据
logs = [(1, 'log1'), (3, 'log3'), (5, 'log5'), (7, 'log7'), (9, 'log9')]
target_timestamp = 4
result = find_first_occurrence(logs, target_timestamp)
print(result)
#输出： (5, 'log5')


#给我写出一个冒泡排序
def bubble_sort(arr):
    n = len(arr)
    for i in range(n):
        for j in range(0, n-i-1):
            if arr[j] > arr[j+1]:
                arr[j], arr[j+1] = arr[j+1], arr[j]
    return arr

# 测试数据
arr = [64, 34, 25, 12, 22, 11, 90]
print(bubble_sort(arr))